import { login, logout, getInfo, getCallbackToken } from "@/api/login";
import { getToken, setToken, removeToken } from "@/utils/auth";
import defAva from "@/assets/images/u34.svg";

const useUserStore = defineStore(
  'user',
  {
    state: () => ({
      token: getToken(),
      id: '',
      name: '',
      avatar: '',
      roles: [],
      permissions: [],
      organizationId: ''
    }),
    actions: {
      // 登录
      login(userInfo) {
        const username = userInfo.username.trim()
        const password = userInfo.password
        const code = userInfo.code
        const uuid = userInfo.uuid
        return new Promise((resolve, reject) => {
          login(username, password, code, uuid).then(res => {
            let data = res.data
            setToken(data.access_token)
            this.token = data.access_token
            resolve()
          }).catch(error => {
            reject(error)
          })
          .catch((error) => {
            reject(error);
          });
      });
    },
    // 获取用户信息
    getInfo() {
      return new Promise((resolve, reject) => {
        getInfo()
          .then((res) => {
            const user = res.user;
            const avatar = user.avatar == "" || user.avatar == null ? defAva : user.avatar;

            if (res.roles && res.roles.length > 0) {
              // 验证返回的roles是否是一个非空数组
              this.roles = res.roles;
              this.permissions = res.permissions;
            } else {
              this.roles = ["ROLE_DEFAULT"];
            }
            sessionStorage.setItem("organizationId", user.organizationId);
            sessionStorage.setItem("userId", user.userId);
            this.id = user.userId;
            this.name = user.userName;
            this.avatar = avatar;
            this.organizationId = user.organizationId
            resolve(res);
          })
          .catch((error) => {
            reject(error);
          });
      });
    },
    // 退出系统
    logOut() {
      return new Promise((resolve, reject) => {
        logout(this.token)
          .then(() => {
            this.token = "";
            this.roles = [];
            this.permissions = [];
            removeToken();
            resolve();
          })
          .catch((error) => {
            reject(error);
          });
      });
    },
    // SSO登录
    SSOLogin(ssoInfo) {
      return new Promise((resolve, reject) => {
        getCallbackToken(ssoInfo)
          .then((res) => {
            console.log(res)
            if (!res.access_token || res.code == 302) resolve(res)
            let data = res.data
            setToken(data.access_token)
            this.token = data.access_token
            resolve(res)
          })
          .catch((error) => {
            reject(error)
          })
      })
    }
  },
});

export default useUserStore;
